﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Util.CommonExtensions
{
    /// <summary>
    /// DateTime 扩展方法
    /// </summary>
    public static class DateTimeExtension
    {
		/// <summary>
		/// WeekOfMonth
		/// 计算日期在一个月的第几周
		/// </summary>
		/// <param name="datetime"></param>
		/// <returns>第几周</returns>
		public static int GetWeekOfMonth(this DateTime datetime)
		{
			DateTime toCalcDate = datetime.Date;

			DateTime firstDayOfMonth = new DateTime(toCalcDate.Year, toCalcDate.Month, 1); // 本月第一天 

			// TODO 如何设置 DayOfWeek 周日 为 第一天, 周一 为 第一天 ( 或者其他奇葩的计算方式 周4 为 第一天 )

			int firstDayOfMonthXingQiJi = (int)firstDayOfMonth.DayOfWeek == 0 ? 7 : (int)firstDayOfMonth.DayOfWeek; // 本月第一天是周几 

			int firstWeekEndDay = 7 - (firstDayOfMonthXingQiJi - 1); // 本月第一周有几天 

			int diffDay = toCalcDate.Day - firstWeekEndDay; // date 与 第一周总天数之差

			diffDay = diffDay > 0 ? diffDay : 1;

			int r = ((diffDay % 7) == 0 ? (diffDay / 7 - 1) : (diffDay / 7)) + 1 + (toCalcDate.Day > firstWeekEndDay ? 1 : 0); // 当前是第几周,如果整除7就减一天 

			return r;
		}


		///// <summary>
		///// 计算一年一共有多少周
		///// </summary>
		///// <param name="year"></param>
		///// <returns></returns>
		//public static int GetTotalWeek(int year)
		//{ 
		//	DateTime 
		//}

	}
}
